package com.nyist.mq.service;

import org.apache.rocketmq.client.producer.SendResult;

/**
 * 1.
 *
 * @author yangxiaogen
 * @date 2023/3/21 16:51
 */
public interface ProducerService {

    /**
     * 无返回发送消息 , 只管发送
     *
     * @param message
     * @return void
     * @author yangxiaogen
     * @date 2023/3/23 15:58
     */
    void send(String message);

    /**
     * 发送同步消息（阻塞当前线程，等待broker响应发送结果，这样不太容易丢失消息）
     * @author yangxiaogen
     * @date 2023/3/23 16:07
     * @param message
     * @return org.apache.rocketmq.client.producer.SendResult
     */
    SendResult syncSend(String message);
    /**
     * （通过线程池执行发送到 broker 的消息任务，执行完后回调：在SendCallback中可处理相关 成功 异常 时的逻辑）
     * 发送异步消息 (适用于响应时间敏感业务场景)
     * 通过 sendCallback 来获取发送消息, onSuccess 发送成功 . onException 发送异常
     * @author yangxiaogen
     * @date 2023/3/23 16:07
     * @param message
     * @return org.apache.rocketmq.client.producer.SendResult
     */
    void asyncSend(String message);

    /**
     * 发送延时消息（上面的发送同步消息，delayLevel的值就为0，因为不延时）
     * 在start版本中 延时消息一共分为18个等级分别为：1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
     */
    void sendDelayMsg(String msgBody, int delayLevel);

    /**
     * 发送单向消息（只负责发送消息，不等待应答，不关心发送结果，如日志）
     */
    void sendOneWayMsg(String msgBody);

    /**
     * 发送带tag的消息，直接在topic后面加上":tag"
     */
    SendResult sendTagMsg(String msgBody, String tag);

    String testUser();

}
